// 导入axios
import { Message } from 'element-ui'
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// import {getTimeStamp} from './auth'

// 定义一个token过期的时间（默认30分钟）
// const exporess_time = 30*60*1000
// const exporess_time = 5*1000

// 创建axios副本
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASEURL
})
// 设置拦截器
// 请求拦截器
instance.interceptors.request.use(
  config => {
    // // 得到当前的时间
    // const currentTime = Date.now()
    // // 得到token的保存时间
    // const token_time = getTimeStamp
    // // 得到两者的时间间隔
    // const space = currentTime - token_time
    // // 判断间隔是否大于exporess_time
    // if(space>exporess_time){
    //   // 已经过期了
    //   // 清除token,跳转到登录页面，中断后续请求
    //   store.dispatch('user/logout')
    //   Message({
    //     type: 'info',
    //     message: '登录超时，请重新登录'
    //   })
    //   router.push(`/login?_redirect=${window.location.href.split('#')[1]}`)
    //   return Promise.reject(new Error('登录超时，请重新登录'))
    // }
    // 统一注入token
    // 得到token
    const token = store.getters.token
    if (token) {
      // 将token添加到请求头中
      config.headers.Authorization = `Bearer ${token}`
    }
    // 成功回调
    return config
  },
  error => {
    // 失败的回调
    return Promise.reject(error)
  }
)
// 响应拦截器
instance.interceptors.response.use(
  response => {
    // response：axios请求服务器之后，服务器响应回来的数据（此时，axios已经将返回的数据包装到了data中）
    // 成功回调
    // 解构 response
    const { success, message } = response.data
    // 判断success
    if (success) {
      // 成功回调
      return response.data
    } else {
      // 提示错误
      Message({
        message,
        type: 'error'
      })
      // 失败
      return Promise.reject(new Error(message))
    }
  },
  // 错误时的回调：服务器响应的状态是4XX时触发
  error => {
    // 接收返回的错误信息中的code，并且判断code === 10001
    const bool = error.response.data.code === 10002
    if (bool) {
      Message({
        type: 'info',
        message: '登录过期，请重新登录'
      })
      // 说明token失效，需要清除token重新登录
      store.dispatch('user/logout')
      // 跳转到登录页面
      // 先将当前访问的页面路径记录下来
      let url = window.location.href.split('#')[1]
      // 保存到login的路径中
      router.push(`/login?_redirect=${url}`)
    }
    return Promise.reject(error)
  }
)
// 暴露 instance
export default instance
